Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [c] le stringhe
Forum - C/C++ - [c] le stringhe

Avatar
spode (Normal User)
Pro


Messaggi: 151
Iscritto: 03/09/2010

Segnala al moderatore
Postato alle 12:23
Domenica, 03/10/2010
Codice sorgente - presumibilmente Plain Text

  1. printf("Inserisci una parola: ");
  2.     scanf("%s",&s1);
  3.  
  4.     for(m=strlen(s1),k=0;m!=-1;m--,k++)
  5.     {
  6.         strcpy(s2[k],s1[m]);
  7.         }
  8.  
  9.         printf("\nLa stringa al contrario è %s",s2);



restituisce "segment fault". mi spiegate bene le stringhe? sono parecchi programmi che faccio e tutti danno lo stesso errore

PM Quote
Avatar
ShellCoder_ (Member)
Newbie


Messaggi: 1
Iscritto: 09/09/2010

Segnala al moderatore
Postato alle 14:46
Domenica, 03/10/2010
Codice sorgente - presumibilmente Plain Text

  1. scanf("%s",&s1);



E' sbagliato...
s1 è già di per se un puntatore a stringa (char*)
quindi fai così:

Codice sorgente - presumibilmente Plain Text

  1. scanf("%s",s1);



Inoltre fai un uso sbagliato di strcpy... non puoi passare come argomenti delle variabili di tipo char, devi passare puntatori a stringhe, quindi char*

Il prototipo è

Codice sorgente - presumibilmente C++

  1. char * strcpy ( char * destination, const char * source );


Ultima modifica effettuata da ShellCoder_ il 03/10/2010 alle 14:53
PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 15:26
Domenica, 03/10/2010
Premetto che ciò provato ma non sono riuscito ad implementare un algoritmo di reverse(Grave:pat:) però ho fatto una piccola ricerca e ho trovato una funzione del c che fa questa cosa strrev().
la funzione strrev inverte l'ordine dei caratteri di una stringa, il suo prototipo è il seguente:
Codice sorgente - presumibilmente C/C++

  1. char *strrev(char *str);


Il carattere terminatore resta in fondo alla stringa. La funzione restituisce un puntatore a str
esempio:
Codice sorgente - presumibilmente C/C++

  1. #include <stdio.h>
  2. main(){  
  3.        char x[10];
  4.        printf("Inserisci la stringa: ");
  5.        scanf("%s",x);              
  6.        printf("\n\nstringa di partenza %s",x);      
  7.        printf("\n\nstringa rovesciata %s\n\n", strrev(x));      
  8.        system("PAUSE");
  9. }



PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 20:55
Domenica, 03/10/2010
dai, non è complicato scrivere un reverse.

Codice sorgente - presumibilmente C++

  1. char * reverse(const char *strToRev)
  2. {
  3.         int l = strlen(strToRev);
  4.         int l2 = 0;
  5.         char *s = (char *)malloc(sizeof(char) + l);
  6.        
  7.         while(l2 < l)
  8.         {
  9.                 s[l2] = strToRev[(l - l2) - 1];
  10.                 l2++;
  11.         }
  12.         return s;
  13. }



anche se ammetto che non piace neanche a me questa soluzione.
Sarebbe meglio che fosse l'utilizzatore ad istanziare la stringa di ritorno, in questo modo.

Codice sorgente - presumibilmente C++

  1. void reverse(const char *strToRev, char *strReverse, int l)
  2. {
  3.         int l2 = 0;
  4.        
  5.         while(l2 < l)
  6.         {
  7.                 strReverse[l2] = strToRev[(l - l2) - 1];
  8.                 l2++;
  9.         }
  10. }



in questo modo è l'utilizzatore a gestire totalmente la vita della stringa strReverse, sia in fase si creazione sia in fase di distruzione.


PS: non li ho provati ma credo non ci siano errori strani...

PM Quote
Avatar
spode (Normal User)
Pro


Messaggi: 151
Iscritto: 03/09/2010

Segnala al moderatore
Postato alle 21:41
Martedì, 05/10/2010
grazie a tutti. comunque preferisco la prima risposta, perchè non mi va di imparare a memoria le funzioni.

PM Quote